package `02-lambda_rxjava`.rxjava01


fun main() {
    //create函数 无输入，输出是HelperString对象，对象中的变量item = "我是字符串"
    create{
        "我是字符串"  //create操作符函数体的输出，map操作符函数体的输入
    }
        //map函数是HelperString类的函数，输入是create函数输出对象中的item（“我是字符串”），输出是HelperInt对象，对象中的变量item = 5（it.length）
        .map{ it:String->
            it.length  //当前操作符函数体的输出，下一个map操作符函数体的输入
        }
        //map函数是HelperInt类的函数，输入是上面map函数输出对象中的item（5），输出是HelperUnit对象，对象中的变量item = "【$it】"
        .map{it:Int->
            "【$it】" //当前操作符函数体的输出，consumer操作符函数体的输入
        }
        //consumer函数是HelperUnit类的函数，输入是上面map函数输出对象中的item（【5】），输出是Unit
        .consumer{it:String->
            println("内容的长度是$it")
        }
}

fun  create(action:()->String):HelperString{
    var newItem:String = action()
    return HelperString(newItem)
}

class HelperString(private var item:String){
    fun map(action:(String)->Int):HelperInt{
        var newItem:Int = action.invoke(item)
        return HelperInt(newItem)
    }
}

class HelperInt(private var item:Int){
    fun map(action:(Int)->String):HelperUnit{
        var newItem:String = action.invoke(item)
        return HelperUnit(newItem)
    }
}

class HelperUnit(private var item:String){
    fun consumer(action:(String)->Unit):Unit{
        return action.invoke(item)
    }
}
